《重构》的重构(重构(第2版))书评

您所在的位置:网站首页 重构第二版 豆瓣 《重构》的重构(重构(第2版))书评

《重构》的重构(重构(第2版))书评

2024-06-11 11:31| 来源: 网络整理| 查看: 265

我虽有第一版,但是买来后一直束之高阁,原因有很多,譬如是用 Java 写的啦(是的我对 Java 有偏见)、被人借过啦,不一而足。直到听说第二版要出版后,而且是用 JavaScript 写的,我才猛地惊了:难道又要重复当年我买完 CSAPP 第二版以后又买本第三版的悲剧(第三版是 64 位操作系统,第二版是 32 位)?

惊是惊完了,没有进展,书依旧没读。直到异步社区搞活动,第二版的迷你版奉上,一百页左右,到手就哗哗哗看完了——才发现这本书是多么易读。

先说作者,作者曾经也是写 Java 的,后来貌似不喜欢 Java 了(正常人都会这样吧),先是跟人合著了本 Ruby 版的重构,然后——又应上了那个说法:所有能用 JavaScript 写的东西终将用 JavaScript 写成。这本关于重构的书,终于用 JavaScript 做了重构。当我在书里看到 Object.assign、Lodash 和箭头函数时,我的内心感到了快乐。尤其是小步重构到后来,函数体里都转成箭头函数和 lambda 表达式,hmm,真香。

这个迷你版的第一二章都是完整的,到后面具体到重构细节就只是摘录,不过还比较连贯,不影响理解。不知道是谁选出来的迷你版,蛮妙啊。

书的第一章从一个例子开始,一步步地重构,看得人如痴如醉——这可不是玩笑,重构的精妙能将人完全代入。而且这个例子,也随着时代的变迁进行了场景修改,第一版是用的影碟出租屋的例子,但是现在基本上很少有人租碟了,所以改成了剧场看剧,嗯很时髦,也算是一种“重构”吧。

书里对重构这个词进行了阐释:重构 !== 更改,尤其是不等于影响函数正常工作的更改。在作者的概念体系里,重构是小步的、不影响函数行为的迭代式更改,嗯,跟敏捷的概念有点像。重构跟性能优化很像:都是修改代码且不影响行为。但前者是为了理解、便于修改;后者是为了性能而改。

关于重构和加新功能的配合,作者把它们比喻成两顶帽子——你戴或者不戴,什么时候戴,都随你,但是你要清楚自己戴着哪一顶帽子。

重构的时机,在书中看来,应该是不得不重构时:譬如添加新功能前,重构能让修改更容易;帮助自己理解代码时,重构能让代码更易懂;捡垃圾时,重构可以改掉屎一样的代码(你懂的)。

同样,也有不需要重构的时候:比如这段代码凌乱但是跟我无关、也不需要修改或是在某个隐藏得很好的 API 下。又或者重写更容易,那就重写吧。

另外,关于变量命名的经验:作者喜欢把所有返回值变量命名成 result,学到了——这样能一眼就知道变量的作用。以及,因为 JavaScript 是动态类型语言,所以作者喜欢在变量命名里加类型,尤其是加入不定冠词,比如 aPerformance。

Anyway,重构不是银弹。我认为重构是需要在对代码的业务逻辑、对系统的边界、以及前人的意图都有所理解的基础上才能做的事情。依然记得刚入职时跟着同事们一起 pair programming,看着他们一步步地把代码重构时那种爽感。相信这也是一本常看常新的书啦。再多说一句:完整的测试用例才是重构的关键前提。以及,如之前看的《程序员的呐喊》里说的那样,如果你的 team 里都是天才程序员,管他什么重构不重构的,哈哈哈哈。

可惜大部分 team 都是由像我这样的庸人组成 :) 最好还是每个人会一些重构让世界更美好吧。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3